<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
            1、push
            2、pop
            3、shift
            4、unshift
            5、sort
            6、splice
            7、reverse
            8、concat
            9、some
            10、every
            11、find/findIndex
            12、map
            13、forEach
            14、filter
            15、indexOf
            16、join
            17、keys
        */
        // push 方法用于向数组的末尾添加一个或者多个元素 返回数组的长度
        let arr = ['a', 'b', 'c'];
        // arr[7] = 'd';
        // 

        let len = arr.push('d', 'e');

        console.log(len)
        // pop 方法  数组中末尾弹出一个元素 返回值是弹出的元素
        arr = ['a', 'b', 'c'];
        console.log(arr.pop())
        // unshift 数组的开头添加一个或者多个元素 返回长度
        arr = ['a', 'b', 'c'];
        arr.unshift('e');
        console.log(arr);
        // shift 数组的开头弹出元素
        arr = ['a', 'b', 'c'];
        console.log(arr.shift())

        // sort方法 排序方法 会修改当前数组 可以自动将数组中元素进行排序
        // sort 默认是按照字符串进行排序的
        // sort方法的回调函数两个参数 最终需要返回数来确定大小关系
        // a-b 从小到大排序  b-a从大到小
        let arr2 = [90, 30, 10, 20, 1, 7];
        arr2.sort(function (a, b) {
            // return a-b
            return b - a
        });
        console.log(arr2);
        // splice方法 可以实现数组的元素添加、修改、删除功能
        // 语法 数组.splice(start, deleteCount, item1, item2, /* …, */ itemN)
        // start 表示数组开始的元素位置
        // deleteCount 表示删除的元素个数
        // item1... 表示添加的元素
        arr = ['a', 'b', 'c'];
        // 添加数组元素
        arr.splice(0, 0, 'd', 'e')
        console.log(arr)
        // 删除元素
        arr = ['a', 'b', 'c', 'e', 'd'];
        arr.splice(2, 1);
        console.log(arr)
        // 修改元素
        arr = ['a', 'b', 'c', 'e', 'd'];
        arr.splice(2, 1, 'cc');
        console.log(arr)

        // reverse方法 将数组翻转 会改变原数组
        arr = ['a', 'b', 'c'];
        arr.reverse();
        console.log(arr)
        //concat 数组拼接 不会改变原数组
        arr = ['a', 'b', 'c'];
        let res = arr.concat(['d', 'e']);
        console.log(arr, res);
        arr = ['a', 'b', 'c'];
        console.log(arr.concat('d', 'e'))
        // join 将数组中元素按照指定的字符进行拼接 得到的是一个字符串
        arr = ['a', 'b', 'c'];
        console.log(arr.join('☺'));
        // indexOf 查找数组中元素首次出现未知 返回的是下标 不存在返回的是-1
        // 特别注意 是否存在 不要使用返回值 直接转换布尔  需要与-1进行比较
        arr = ['a', 'b', 'c', 'a', 'b'];
        console.log(arr.indexOf('e'));
        console.log(arr.indexOf('b'));
        // indexOf 第二个参数指定 偏移的位置
        console.log(arr.indexOf('b', 2));

        // 语法 数组对象.forEach(function(item,index){})
        // 系统的forEach 会自动的遍历数组中元素 每次遍历会调用匿名函数 并且传递元素值与下标 
        arr = ['鹿哈', '王二博', '王俊卡', '易烊干洗'];
        // forEach

        arr.forEach(function (value, index) {
            console.log(value, index)
        })
        // 使用常规的for语句遍历的时候 可以配合 break continue中终止循环
        // 在forEach中无法终止对整个元素的遍历 就算再 forEach中使用 return 也只能终止当前这个元素的
        arr.forEach(function (value, index) {
            if (value == '王二博') {
                return;
            }
            console.log(value, index)
        })

        // map 将数组中每个元素使用匿名函数进行处理，会将匿名函数中返回结果组合到一起形成新的数组作为map的返回值
        let scroe = [98, 76, 58, 66, 20, 90];
        let res2 = scroe.map(function(item){
            return item * 0.5;
        })
        console.log(res2);
        // filter 语法与forEach一直，实现过滤功能 要求匿名函数返回布尔值 决定元素是否保留  保留的元素最后组合形参新数组作为filter的返回值
        scroe = [98, 76, 58, 66, 20, 90];
        let res3 = scroe.filter(function(item){
            return item>=90;
        })
        console.log(res3);

    </script>
</body>

</html>